Preparing iOS Applications for App Store Submission in React Native
Course: React Native Training
Topic: Preparing iOS Applications for App Store Submission
Course Link: React Native Training at JustAcademy
Demo Link: Register for a Course Demo
JustAcademy Website: Visit JustAcademy
1. Introduction to iOS App Store Submission
Preparing an iOS application for App Store submission is an important stage in the React Native development lifecycle. After developing and testing an application, developers must configure its identity, prepare a production build, manage signing credentials, create the App Store listing, provide screenshots and descriptions, complete privacy information, and submit the application for Apple's review.
React Native allows developers to build cross-platform applications using JavaScript or TypeScript and native platform capabilities. However, an iOS application must still comply with Apple's technical, security, privacy, design, and distribution requirements before it can be released publicly.
For Expo-based React Native applications, developers can use Expo Application Services (EAS) Build to generate production binaries and EAS Submit to upload them to App Store Connect. Alternatively, developers can build and upload applications through Xcode on macOS.
Learning Objectives
- Understand the iOS App Store release lifecycle.
- Learn the prerequisites for publishing a React Native application.
- Configure an iOS bundle identifier and application metadata.
- Prepare icons, splash screens, screenshots, and store descriptions.
- Understand certificates, provisioning profiles, and code signing.
- Configure Expo and EAS Build for a production iOS application.
- Create and upload an iOS production build.
- Use App Store Connect and TestFlight for testing.
- Complete privacy disclosures, age ratings, and compliance information.
- Understand Apple's review process and common rejection reasons.
- Prepare a repeatable production release checklist.
2. Understanding the iOS App Distribution Lifecycle
Publishing an iOS application involves several connected stages. Completing the development work alone is not sufficient; the application must also be packaged, signed, uploaded, described, tested, and approved for distribution.
2.1 Main Stages
- Application development: Build the user interface, business logic, navigation, API integrations, and native functionality.
- Functional testing: Test major features on simulators and physical devices.
- Release configuration: Set the bundle identifier, version, build number, permissions, icons, and environment configuration.
- Signing configuration: Prepare the distribution certificate and provisioning profile or use an appropriate managed-signing workflow.
- Production build: Generate a release-ready iOS application binary.
- App Store Connect setup: Create the app record and complete its required information.
- Build upload: Upload the binary using EAS Submit, Xcode, or Transporter.
- Beta testing: Use TestFlight to test the uploaded build where appropriate.
- App Review submission: Select the build, complete required metadata, and submit it for review.
- Release: After approval, make the application available according to the selected release settings.
2.2 Workflow Diagram
React Native App Development
|
v
Functional and Device Testing
|
v
Configure Bundle ID and Version
|
v
Prepare Icons, Permissions and Privacy
|
v
Configure Signing Credentials
|
v
Create Production iOS Build
|
v
Upload to App Store Connect
|
v
TestFlight Testing and Validation
|
v
Complete Store Listing and Compliance
|
v
Submit for Apple App Review
|
v
Approval and App Store Release
3. Prerequisites for App Store Submission
3.1 Apple Developer Account
A paid Apple Developer Program membership is generally required to submit an application to the Apple App Store. The account provides access to the developer resources, signing capabilities, and distribution services required for publishing.
Before starting, confirm that:
- The developer membership is active.
- The correct Apple Developer team is selected.
- The developer has the required permissions to manage the app.
- Required agreements and account details are up to date.
- The application identifiers and signing resources belong to the correct team.
3.2 Required Development Tools
| Tool or Resource |
Purpose |
| Node.js |
Runs the JavaScript tooling used by the React Native project. |
| npm, Yarn, or pnpm |
Installs and manages project dependencies. |
| React Native or Expo project |
Contains the application source code and configuration. |
| EAS CLI |
Configures and manages cloud builds and submissions for supported workflows. |
| Xcode |
Builds, archives, signs, and uploads iOS applications locally on macOS. |
| Apple Developer account |
Provides the membership and signing resources required for distribution. |
| App Store Connect |
Manages the application listing, builds, testing, review, and release. |
| TestFlight |
Distributes eligible beta builds to testers. |
| Git |
Tracks source changes and helps reproduce release versions. |
When using EAS Build and EAS Submit, cloud services can handle many build and upload operations without requiring a local Mac. A Mac with Xcode is needed for the traditional local Xcode archive workflow.
3.3 Verify the React Native Project
Before preparing the release, open the project directory and install dependencies using the package manager associated with the project.
cd MyReactNativeApp
npm install
For Expo projects, run the following checks:
npx expo-doctor
npx expo start
Resolve relevant dependency and configuration warnings, then test the application locally. Do not assume that a successful development session guarantees that the production build will succeed.
4. Preparing the React Native Application for Release
4.1 Review Application Functionality
Before creating a production build, verify that the main user journeys are complete and reliable.
- Application launch and initial loading.
- Registration, login, logout, and account recovery.
- Navigation between screens.
- API requests and error handling.
- Forms, input validation, and data submission.
- Offline and poor-network behavior.
- Push notifications, camera, location, and other native features when used.
- Payment and subscription flows, if applicable.
- Accessibility and readable interface elements.
- Account deletion and privacy-related flows, when applicable to the app.
4.2 Remove Development-Only Behavior
A release build should not expose development menus, test credentials, debug endpoints, mock production data, or temporary navigation routes. Review all development-only settings before publishing.
if (__DEV__) {
console.log("Development-only diagnostics");
}
The example shows a basic development-only conditional. Production security must not rely solely on hiding a menu or disabling a log statement. Remove secrets from the client bundle and enforce access control on the server.
4.3 Verify Dependencies
Check that all dependencies support the project's React Native and Expo versions. Native libraries should be compatible with the target iOS environment and configured correctly for release builds.
- Review dependency versions and the package lockfile.
- Verify Expo config plugins where applicable.
- Remove unused packages.
- Check native modules and third-party SDK configuration.
- Test major dependency upgrades before preparing the final build.
5. Configuring the iOS Bundle Identifier
5.1 What Is a Bundle Identifier?
The bundle identifier is a unique string that identifies an iOS application. It commonly follows a reverse-domain naming convention, such as com.company.application.
The identifier connects the application configuration with Apple's app registration, signing setup, and App Store Connect record. For an existing published application, changing the identifier generally creates a different app identity rather than updating the existing listing.
5.2 Configure the Bundle Identifier in Expo
In an Expo project, define the identifier in app.json or the corresponding app configuration file.
{
"expo": {
"name": "TrainingApp",
"slug": "training-app",
"version": "1.0.0",
"ios": {
"bundleIdentifier": "com.example.trainingapp"
}
}
}
The bundle identifier above is only an example. Replace it with a unique identifier controlled by your organization.
5.3 Important Identifier Rules
- Use a valid, stable identifier.
- Make sure the App Store Connect record uses the matching identifier.
- Use the correct Apple Developer team.
- Verify that the production build resolves the intended configuration.
- Avoid changing the identifier after the app has been published unless you intend to create a separate app.
6. Configuring Application Name, Version, and Build Number
6.1 Application Name
The application name shown to users should be clear, recognizable, and consistent with the product's branding. In Expo, the name field provides the display name used in supported app configuration workflows.
{
"expo": {
"name": "TrainingApp"
}
}
6.2 Version Number
The user-facing version identifies a release, for example 1.0.0. Version numbers should follow a consistent release strategy so users and developers can identify updates.
{
"expo": {
"version": "1.0.0"
}
}
6.3 iOS Build Number
The iOS build number distinguishes uploaded builds associated with an app version. Each new upload generally needs a build number that meets Apple's versioning requirements and does not conflict with an existing uploaded build.
{
"expo": {
"ios": {
"buildNumber": "1"
}
}
}
When using EAS remote version management or automatic increments, verify the effective version and build number rather than assuming the values in the local file are the final values used by the build.
6.4 Versioning Best Practices
- Use a documented versioning convention.
- Increment the build number for subsequent uploads as required.
- Check the resolved values before submitting.
- Keep release notes associated with the version.
- Ensure that the build corresponds to the intended source revision.
7. Preparing App Icons and Launch Screens
7.1 App Icon
The app icon represents the application on the Home Screen and in other supported iOS interfaces. It should be clear, distinctive, and consistent with the application's identity.
Recommended preparation practices:
- Use a high-quality source image with sufficient resolution.
- Follow Apple's current icon specifications and asset requirements.
- Ensure that the design remains recognizable at small sizes.
- Avoid including unnecessary text or detailed imagery that becomes unreadable.
- Check that the icon is appropriate for the target app and does not use unauthorized branding.
7.2 Configure an Expo App Icon
{
"expo": {
"icon": "./assets/icon.png"
}
}
Verify the file path and image format. Expo may generate or configure platform-specific assets during the build process.
7.3 Splash Screen
The splash screen is displayed while the application starts. A well-designed launch screen helps establish branding and gives the app a consistent startup experience.
{
"expo": {
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
}
}
}
This example illustrates a simple configuration. Supported splash-screen configuration can depend on the Expo SDK and the installed splash-screen package. Check the current Expo documentation before using additional properties.
7.4 Asset Checklist
- App icon is present and correctly referenced.
- Splash screen displays the correct branding.
- Images are optimized for suitable file sizes.
- Assets do not contain temporary or test branding.
- Images render correctly on supported screen sizes.
- Store screenshots represent the actual application.
8. Managing iOS Permissions and Info.plist Configuration
8.1 What Is Info.plist?
The iOS information property list contains application metadata and configuration values. These may include the display name, bundle identifier, permission explanations, supported capabilities, and other platform settings.
In Expo projects, some native configuration values can be set through app.json or app.config.js and applied during the build process.
8.2 Permission Descriptions
If an application accesses protected resources, such as the camera, microphone, photo library, or location, it may need the appropriate usage-description strings. The description should explain the actual user-facing purpose of the permission.
{
"expo": {
"ios": {
"infoPlist": {
"NSCameraUsageDescription": "Allow camera access to capture profile photos."
}
}
}
}
Include only permissions the app genuinely needs. The example description should be changed if the camera is used for a different purpose.
8.3 Common iOS Permissions
| Resource |
Typical Purpose |
Important Consideration |
| Camera |
Capturing photos or scanning codes |
Explain the feature requiring camera access. |
| Photo Library |
Selecting or saving images |
Use appropriate access and accurate descriptions. |
| Location |
Maps, navigation, or location-based services |
Request only the level of access required. |
| Microphone |
Voice messages or audio recording |
Clearly explain when audio capture is used. |
| Notifications |
Alerts and updates |
Request permission at an appropriate time. |
| Contacts |
Contact selection or related features |
Explain the purpose and minimize data collection. |
8.4 Permission Best Practices
- Request permissions only when needed.
- Explain the feature before displaying a system permission prompt when appropriate.
- Do not request permissions unrelated to core functionality.
- Test both granted and denied permission states.
- Ensure permission descriptions accurately represent app behavior.
- Review Apple's current policies for sensitive capabilities.
9. App Privacy and Data Protection
9.1 Understand What Data the App Collects
Before submitting an application, document the personal data it collects, uses, shares, and retains. This review must include data collected by third-party SDKs and services integrated into the app, not just data directly handled by your own code.
Potential data categories include:
- Contact information.
- Account identifiers.
- Location data.
- Photos, videos, and audio.
- Usage and diagnostic information.
- Device or advertising identifiers.
- Payment-related information handled by the app or service providers.
9.2 App Privacy Details
App Store Connect asks developers to provide privacy information describing the app's data practices. These declarations should accurately reflect what the app and its third-party partners actually do.
- Identify each relevant data category.
- Determine whether the data is linked to the user.
- Determine whether data is used for tracking as defined by Apple.
- Review third-party SDK privacy documentation.
- Explain the app's practices in its privacy policy.
- Update the disclosures whenever data practices change.
9.3 Privacy Policy
A privacy policy should be accessible to users and describe the app's data collection, use, sharing, retention, security practices, and contact information. It should be consistent with the actual implementation and applicable legal obligations.
Provide the privacy policy URL in the relevant App Store Connect field. If the application includes an in-app privacy policy link, ensure it opens successfully.
9.4 Account Deletion
If an app supports account creation, review Apple's current requirements concerning account deletion. Apps that allow users to create accounts generally need to provide a way to initiate account deletion within the app, subject to Apple's applicable exceptions and guidance.
Test the deletion process end to end, including the backend behavior and any required confirmation steps. Simply logging the user out or disabling the account may not satisfy the applicable requirement.
9.5 Data Security Checklist
- Use HTTPS for network communication.
- Keep private service credentials on trusted servers.
- Store sensitive local data securely.
- Implement appropriate authentication and authorization.
- Avoid collecting unnecessary personal information.
- Ensure that analytics and advertising SDKs are configured appropriately.
- Keep the privacy policy and App Store privacy declarations accurate.
10. Code Signing, Certificates, and Provisioning Profiles
10.1 What Is Code Signing?
Code signing allows Apple platforms to verify the identity associated with an application and helps ensure that the app is packaged for an authorized distribution method. A release build must use the appropriate signing configuration.
10.2 Distribution Certificate
A distribution certificate is associated with the developer account and is used to sign applications for distribution. Its private key must be protected because unauthorized access could compromise the integrity of the release process.
10.3 Provisioning Profile
A provisioning profile connects the app identity with the relevant signing and distribution permissions. The profile used for an App Store distribution build must be appropriate for the intended application and distribution method.
10.4 Manage Credentials with EAS
Expo developers can inspect and manage credentials through EAS CLI:
eas credentials --platform ios
Follow the interactive prompts to review or configure the credentials for the intended build profile. The exact steps depend on whether the project uses EAS-managed credentials or developer-managed signing.
10.5 Credential Best Practices
- Keep signing certificates and private keys secure.
- Do not commit credentials to Git repositories.
- Limit access to authorized developers and release automation.
- Check credential expiry and provisioning configuration.
- Verify the correct Apple Developer team is selected.
- Avoid replacing production credentials without understanding the impact.
11. Configuring Expo and EAS for an iOS Production Build
11.1 Install EAS CLI
npm install --global eas-cli
11.2 Log In
eas login
eas whoami
11.3 Configure EAS Build
If the project has not been configured for EAS Build, run:
eas build:configure
Review the generated eas.json file and confirm that the project is linked to the intended Expo account.
11.4 Example Production Build Profile
{
"build": {
"production": {
"autoIncrement": true
}
}
}
This is a minimal illustrative profile. Real projects may require additional configuration, including version management, environment values, build tool versions, and other settings. Verify the supported schema for the project's Expo SDK and EAS CLI.
11.5 Build the iOS Application
eas build --platform ios --profile production
EAS Build prepares and compiles the application using the configured build profile. Monitor the build logs and resolve any reported configuration, dependency, native compilation, or signing problems.
11.6 Verify the Production Configuration
- Confirm the intended bundle identifier.
- Confirm the app version and build number.
- Verify the production API endpoint.
- Check permissions and usage descriptions.
- Review app icons and launch-screen assets.
- Verify the signing configuration.
- Ensure debug-only features and test credentials are absent.
12. Building with Xcode Instead of EAS
12.1 When to Use Xcode
Xcode is Apple's native development environment and can be used to build, archive, sign, and upload an iOS application. This workflow is useful for teams that manage their own native project or need to diagnose native build settings directly.
12.2 Generate the Native iOS Project
For an Expo project using Continuous Native Generation, the native iOS project can be generated when required using:
npx expo prebuild
Review the project's workflow before running this command because it may create or update native project files. Do not overwrite custom native changes without understanding how they are maintained.
12.3 Open the Workspace
xed ios
Open the appropriate workspace in Xcode. If the project uses CocoaPods, the workspace is generally the correct entry point for the native application.
12.4 Configure Signing
- Select the application target in Xcode.
- Open the Signing & Capabilities settings.
- Select the correct Apple Developer team.
- Confirm the bundle identifier.
- Enable automatic signing when appropriate, or configure the required signing assets manually.
- Resolve any provisioning or entitlement errors.
12.5 Archive and Upload
- Select a suitable release scheme and device destination.
- Choose Product and then Archive.
- Wait for the archive process to finish.
- Open the Organizer window and select the archive.
- Choose the distribution option for App Store Connect.
- Follow the validation and upload prompts.
- Open App Store Connect and verify that the build appears after processing.
13. Preparing the App Store Connect Record
13.1 What Is App Store Connect?
App Store Connect is Apple's platform for managing app records, uploaded builds, TestFlight testing, product-page metadata, app review submissions, and release settings.
Before uploading a build, create an app record for the application. The record must use the correct platform and match the bundle identifier and relevant developer account.
13.2 Create an App Record
- Sign in to App Store Connect.
- Open the Apps section.
- Choose the option to create a new app.
- Select the platform.
- Enter the application name.
- Select the primary language.
- Choose the bundle identifier.
- Provide any required SKU or internal reference.
- Confirm the correct team and create the record.
13.3 App Store Metadata
| Metadata Field |
Purpose |
| App Name |
Identifies the application on the store. |
| Subtitle |
Provides a concise description of the app's value. |
| Description |
Explains the app's features and benefits. |
| Keywords |
Helps describe relevant search terms within the supported store metadata. |
| Primary Category |
Places the app in an appropriate category. |
| Support URL |
Provides a place for users to find assistance. |
| Privacy Policy URL |
Links to the app's privacy policy. |
| Promotional Text |
Highlights timely app information where available. |
| Screenshots |
Show the app's interface on supported device sizes. |
| Age Rating |
Describes the suitability of the app's content for age groups. |
Apple can change metadata requirements and field limits. Check the current requirements displayed in App Store Connect when preparing a release.
14. Writing an Effective App Store Description
14.1 App Name and Subtitle
Choose an accurate name and subtitle that explain the product without misleading users. Avoid keyword stuffing, unsupported claims, excessive promotional language, or references to features that are not available.
14.2 App Description Structure
A useful description often contains:
- A short opening explaining what the app does.
- The main benefits for the intended audience.
- A list of important features.
- Any relevant usage requirements or limitations.
- Contact or support information where appropriate.
14.3 Example Description
TrainingApp helps learners organize their study activities
and keep track of their learning progress.
Key features:
- Browse available learning resources.
- Organize learning activities.
- Track progress across supported topics.
- Access account features securely.
For assistance, visit our official support website.
This is only a sample. Replace the features with functionality that genuinely exists in your application. Do not submit placeholder copy or claims that cannot be verified.
15. Preparing App Store Screenshots and Preview Media
15.1 Why Screenshots Matter
Screenshots help users understand the app's interface and features before downloading it. They should be clear, accurate, and representative of the actual experience.
15.2 Screenshot Preparation
- Use supported device sizes and image dimensions listed in App Store Connect.
- Show real application screens rather than unrelated promotional artwork.
- Use readable text and clear visual hierarchy.
- Keep branding and typography consistent.
- Avoid misleading feature claims.
- Remove personal data, private account details, and test credentials.
- Check screenshots on different display sizes.
15.3 Suggested Screenshot Sequence
- Home screen and main product value.
- Primary feature or workflow.
- Important user interaction.
- Secondary feature or personalization.
- Account, progress, or reporting experience, where relevant.
Choose screenshots based on the real purpose of the app. Do not include screens that are unavailable to users or depend on unapproved test access.
16. App Privacy Labels and Tracking
16.1 Review Third-Party SDKs
Analytics, advertising, crash-reporting, authentication, and other third-party SDKs may collect data independently of the app's main business logic. Review their documentation and behavior before completing App Store privacy disclosures.
16.2 Understand Tracking
Apple defines tracking according to its platform policies. If an app tracks users across apps or websites owned by other companies, or engages in other activity covered by Apple's tracking rules, additional disclosure and permission requirements may apply.
16.3 Accurate Privacy Disclosures
- Inventory the data collected by the application.
- Identify the purposes for collecting each data type.
- Determine whether the data is linked to the user.
- Review whether any activity qualifies as tracking.
- Check SDK privacy documentation and configuration.
- Ensure the privacy policy matches the actual practices.
- Revisit the disclosures after introducing new SDKs or features.
17. App Review Guidelines and Compliance
Apple reviews applications against its App Review Guidelines. The exact requirements depend on the app's features, business model, target audience, data practices, and distribution method.
17.1 Common Areas of Review
- App completeness and stability.
- Accuracy of metadata and screenshots.
- Privacy and data handling.
- Security and authentication.
- Payments and digital purchases.
- Intellectual property and content rights.
- User-generated content and moderation, when applicable.
- Account creation and deletion, when applicable.
- Permissions and purpose descriptions.
- Accessibility and usability.
17.2 Payments and Subscriptions
Apps selling digital content, subscriptions, or functionality may be subject to Apple's in-app purchase requirements. Rules vary by product, storefront, and applicable exceptions. Review Apple's current guidelines rather than assuming that every payment type can use an external checkout.
If the application uses an external payment provider for eligible physical goods or services, ensure the flow complies with the applicable platform rules and local requirements.
17.3 User-Generated Content
Apps that allow users to publish content may need safeguards such as filtering, reporting, blocking, and contact mechanisms, depending on the feature and Apple's applicable policies.
17.4 Intellectual Property
Use only content, images, logos, music, and other materials that the developer owns or is authorized to distribute. Ensure that the app's name, icon, and metadata do not misrepresent the product or violate another party's rights.
18. Age Rating and Content Declaration
App Store Connect asks developers to answer questions about an app's content and features to determine its age rating. Answer these questions based on the actual application rather than the intended audience alone.
18.1 Content to Review
- Violence or mature content.
- User-generated content.
- Unrestricted web access.
- Gambling-related functionality.
- Health or other sensitive subject matter.
- In-app purchases and other relevant capabilities.
18.2 Best Practices
- Review every question carefully.
- Provide honest and complete answers.
- Check the impact of user-generated content.
- Update the rating information when features change.
- Verify the current age-rating questionnaire in App Store Connect.
19. Export Compliance and Encryption Information
Apps may need to answer questions about encryption and export compliance. The requirements depend on the cryptographic functionality used by the app and applicable regulations.
Do not automatically declare that an app is exempt without checking its actual behavior. If the application uses only standard platform encryption, the applicable declaration may differ from an app that implements or distributes additional cryptographic functionality.
19.1 Review Before Submission
- Inventory the app's encryption-related functionality.
- Review the behavior of third-party SDKs and networking libraries.
- Consult Apple's current export-compliance guidance.
- Answer the questions in App Store Connect accurately.
- Keep supporting information available when required.
For Expo applications, an Info.plist setting such as ITSAppUsesNonExemptEncryption may be relevant to the declaration process. Set it only when it accurately represents the application's situation and applicable guidance.
20. Creating a Production iOS Build with EAS
20.1 Verify the Production Profile
Check that eas.json contains an appropriate production profile.
{
"build": {
"production": {
"autoIncrement": true
}
}
}
This is a minimal example. Production projects may need additional configuration for environment variables, app versioning, native build settings, and credentials.
20.2 Generate the Production Build
eas build --platform ios --profile production
Review the build logs and wait for the build to finish. Resolve any errors before moving to the submission stage.
20.3 Understand the Result
A successful production build provides an iOS artifact suitable for the configured distribution workflow. A typical App Store submission uses a correctly signed iOS application archive in IPA form. Confirm that the artifact is intended for App Store Connect distribution rather than simulator-only testing.
20.4 Verify the Artifact
- Confirm that the build completed successfully.
- Check the app version and build number.
- Confirm the intended bundle identifier.
- Verify that production endpoints are configured.
- Check that the correct signing credentials were used.
- Ensure the application starts and core features work.
21. Uploading the iOS Build to App Store Connect
21.1 Use EAS Submit
EAS Submit uploads a supported iOS build to App Store Connect. It works across supported operating systems and can integrate with EAS Build and CI/CD workflows.
eas submit --platform ios
Follow the prompts to select a build and configure the required Apple submission authentication. Once the upload completes, Apple processes the build before it becomes available for testing or review workflows.
21.2 Configure a Submission Profile
An optional submission profile in eas.json can store the App Store Connect app ID and other supported submission settings.
{
"submit": {
"production": {
"ios": {
"ascAppId": "YOUR_APP_STORE_CONNECT_APP_ID"
}
}
}
}
Replace the placeholder with the actual Apple ID associated with the app record in App Store Connect. Do not confuse this value with the bundle identifier or an Apple Developer team ID.
21.3 Build and Submit in One Workflow
eas build --platform ios --profile production --auto-submit
This can automate the upload step after the build completes, when the project and submission credentials are configured correctly. It does not automatically guarantee that the application has been submitted for public App Review or released to the App Store.
21.4 Manual Upload with Xcode or Transporter
If you are not using EAS Submit, you can archive and upload the application with Xcode on macOS. If you already have a correctly signed IPA, Apple's Transporter app may also be used to deliver the binary to App Store Connect.
22. Testing with TestFlight
22.1 What Is TestFlight?
TestFlight is Apple's beta distribution service. It allows developers to distribute eligible builds to internal or external testers before releasing an app publicly.
22.2 Internal Testing
Internal testing is useful for developers, QA engineers, and team members who need to validate a build before public release.
- Upload the build to App Store Connect.
- Wait for processing to finish.
- Open the app's TestFlight section.
- Add or select the appropriate internal testing group.
- Distribute the build to eligible testers.
- Collect feedback and review crash reports.
22.3 External Testing
External testing allows a broader group of testers to evaluate an app. Depending on Apple's requirements, the build or testing setup may need to pass an additional beta review before external distribution.
22.4 What Should Testers Verify?
- First launch and onboarding.
- Account creation and authentication.
- Primary application workflows.
- API responses and network failure handling.
- Push notifications and permissions.
- Payments and subscriptions, if applicable.
- Performance and memory behavior.
- Layout on supported iPhone and iPad devices.
- Accessibility and text-size behavior.
- Crash-free operation during common workflows.
22.5 Responding to Test Feedback
Record reproducible defects, prioritize critical issues, fix the root cause, and generate a new build when required. Verify that the new build number is appropriate and repeat regression testing before submitting it for review.
23. Completing the Final App Store Listing
After uploading the build and completing testing, open the relevant app record in App Store Connect and complete the required listing information.
23.1 Listing Checklist
- App name and subtitle.
- Promotional text, where applicable.
- Full app description.
- Keywords and category.
- App icon and required screenshots.
- Support URL and privacy policy URL.
- Age-rating questionnaire.
- App privacy declarations.
- Copyright and other required information.
- Pricing, availability, and storefront selection.
- Required app review contact information.
- Review notes and demo account details, if needed.
23.2 Provide App Review Notes
Use the review notes field to explain any important information needed to evaluate the app. If access to protected features requires a test account, provide valid review credentials using the appropriate secure fields and ensure the account remains functional throughout review.
Do not include private production credentials, unrelated internal information, or sensitive user data in review notes.
23.3 Explain Non-Obvious Features
If a feature requires a specific workflow, hardware condition, or test setup, provide concise instructions. Reviewers should be able to understand how to access the app's main features without unnecessary guesswork.
24. Submitting the Application for App Review
24.1 Select the Build
In App Store Connect, select the appropriate app version and attach the processed build to the release. Verify the version and build number before continuing.
24.2 Complete Required Information
App Store Connect may prevent submission when required metadata, privacy declarations, compliance questions, or other information is missing. Review all displayed warnings and resolve the relevant items.
24.3 Submit for Review
- Open the app's distribution or App Store section.
- Choose the intended version.
- Select the correct processed build.
- Complete the required metadata and compliance information.
- Review the release settings.
- Submit the version for App Review.
- Monitor the review status in App Store Connect.
24.4 Possible Review Outcomes
| Status or Outcome |
Meaning |
Next Action |
| Waiting for Review |
The submission is waiting for review to begin. |
Monitor the status and keep review access available. |
| In Review |
Apple is evaluating the submission. |
Respond promptly if Apple requests information. |
| Approved |
The version has passed review. |
Follow the selected release settings. |
| Rejected |
The submission did not meet one or more requirements. |
Read the resolution details, fix the issue, and resubmit. |
| Metadata Rejected |
A metadata or submission issue requires correction. |
Update the relevant information and follow App Store Connect instructions. |
25. Releasing the Approved Application
Approval and public release are related but separate stages. Depending on the release settings, an approved app may be released automatically, manually, or according to a scheduled release option.
25.1 Release Options
- Manual release: The developer chooses when to make the approved version available.
- Automatic release: The version becomes available according to the selected automatic release behavior after approval.
- Scheduled release: The developer selects an eligible release timing option when available.
25.2 Post-Release Verification
- Confirm that the app appears in the intended storefronts.
- Verify the product page and screenshots.
- Download the publicly available version where possible.
- Test login and essential workflows against production services.
- Monitor crash reports, user feedback, and support requests.
- Prepare a hotfix process for serious defects.
26. Common App Store Submission Problems
| Problem |
Possible Cause |
Recommended Solution |
| Bundle identifier mismatch |
Build configuration differs from the App Store Connect record |
Align the identifier and signing setup. |
| Signing failure |
Invalid, missing, expired, or mismatched credentials |
Review the distribution certificate and provisioning configuration. |
| Duplicate build number |
The submitted build number conflicts with an existing upload |
Increment the build number using the project's versioning strategy. |
| Build not visible immediately |
Apple is still processing the uploaded binary |
Wait for processing and check the build status. |
| Missing app metadata |
Required listing fields are incomplete |
Complete the required App Store Connect fields. |
| Invalid or missing screenshots |
Assets do not meet the currently accepted requirements |
Review the current screenshot specifications and replace the assets. |
| Privacy disclosure mismatch |
Declarations do not reflect actual data practices |
Audit app code and third-party SDKs, then update the disclosures. |
| Permission description rejected |
Usage text is missing or does not explain the feature |
Provide an accurate purpose description and verify permission behavior. |
| App crashes during review |
Release-only defect, missing configuration, or unstable dependency |
Reproduce the problem, inspect crash logs, and submit a tested fix. |
| Review account cannot sign in |
Credentials are invalid or the account requires unavailable verification |
Provide a working review account and clear instructions. |
| Incomplete account deletion |
Deletion flow is missing or does not perform the expected action |
Implement and test the required account-deletion workflow. |
| Payment compliance issue |
Payment flow does not comply with the applicable rules |
Review the current App Review Guidelines and adjust the flow. |
| Misleading store description |
Metadata promises features that are absent or inaccurate |
Correct the listing to reflect the actual application. |
27. Responding to an App Store Rejection
27.1 Read the Review Message Carefully
Apple generally provides details about the issue that prevented approval. Review the specific guideline or concern cited rather than guessing which change might resolve it.
27.2 Reproduce and Fix the Problem
- Read the review message and identify the affected feature.
- Reproduce the issue on a suitable device or test environment.
- Review relevant logs, configuration, and application behavior.
- Implement a focused fix.
- Run regression tests.
- Create a new build if the binary must change.
- Update metadata or review notes when necessary.
- Respond through App Store Connect and resubmit when ready.
27.3 Communicate Professionally
When responding to App Review, explain the steps taken to address the issue. If the app already complies and the reviewer may have misunderstood a feature, provide clear reproduction instructions and supporting information.
28. Automating the iOS Release Process
28.1 Why Automate Releases?
Automation can reduce repetitive tasks and improve consistency across builds. It is particularly useful for teams that release frequently or maintain separate development, staging, and production environments.
28.2 Example Build and Submission Commands
# Create an iOS production build
eas build --platform ios --profile production
# Upload a selected build to App Store Connect
eas submit --platform ios --profile production
Before automating, configure the necessary Apple submission authentication and the appropriate EAS project permissions.
28.3 CI/CD Best Practices
- Build from a reviewed and version-controlled source revision.
- Run automated tests before production builds.
- Store tokens and signing credentials securely.
- Restrict access to production release jobs.
- Record build numbers and release identifiers.
- Review build and submission logs.
- Separate build upload from the final public-release decision where appropriate.
- Retain release notes and a clear rollback or hotfix plan.
29. Practical Project: Publish a React Native App to the App Store
Project Objective
Prepare a sample Expo-based React Native application for iOS distribution, generate a production build, upload it to App Store Connect, test it through TestFlight, and complete the App Review submission steps.
Project Requirements
- A working React Native or Expo application.
- An Apple Developer Program membership.
- An Expo account if using EAS Build and EAS Submit.
- A stable bundle identifier.
- Production app icons and launch-screen assets.
- A privacy policy and support URL.
- Accurate privacy disclosures and store metadata.
- Valid signing credentials.
Step 1: Configure the Application
{
"expo": {
"name": "LearningApp",
"slug": "learning-app",
"version": "1.0.0",
"icon": "./assets/icon.png",
"ios": {
"bundleIdentifier": "com.example.learningapp",
"buildNumber": "1"
}
}
}
Replace the example identifier with your own unique bundle ID and verify all referenced asset paths.
Step 2: Configure EAS Build
{
"build": {
"production": {
"autoIncrement": true
}
}
}
Use the configuration appropriate for the project's version-management and release strategy.
Step 3: Verify the App
npm install
npx expo-doctor
npx expo start
Test the main screens, authentication, network requests, permissions, and error handling before creating the production artifact.
Step 4: Create the Production Build
eas build --platform ios --profile production
Monitor the build logs and verify that the generated artifact has the correct identifier and version information.
Step 5: Create the App Store Connect Record
Sign in to App Store Connect, create the application record, and select the bundle identifier that matches the production app.
Step 6: Upload the Build
eas submit --platform ios
Follow the prompts and wait for Apple to process the uploaded build.
Step 7: Test Through TestFlight
- Assign the build to an appropriate testing group.
- Install the app on supported physical devices.
- Test important user journeys.
- Review crashes and tester feedback.
- Fix release-blocking defects before submitting.
Step 8: Complete Store Metadata
Provide the app description, screenshots, category, age rating, privacy details, support information, and other required fields. Confirm that the information accurately represents the application.
Step 9: Submit for Review
Select the correct build, complete the compliance questions, and submit the version for Apple App Review.
Step 10: Verify Release
After approval and release, verify the public listing, install the released app where possible, test essential production workflows, and monitor the application's stability.
Expected Outcome
The project should have a correctly configured iOS application, a signed production build, a completed App Store Connect listing, a tested release candidate, and a documented process for submitting and releasing the application.
30. App Store Submission Checklist
Application Configuration
- Bundle identifier is correct and stable.
- Application name and version are configured.
- Build number is valid and appropriate for the upload.
- Production environment values are correct.
- Required native dependencies are configured.
Design and Assets
- App icon is present and correct.
- Splash screen displays correctly.
- Required screenshots are prepared.
- Images and store copy reflect the actual application.
Security and Privacy
- No private credentials are embedded in the client bundle.
- Network traffic uses appropriate security.
- Permissions and descriptions match actual functionality.
- Privacy policy URL is available.
- App privacy declarations match the app and its SDKs.
- Account deletion is implemented when required.
Build and Signing
- Production build completes successfully.
- Distribution credentials are valid.
- Bundle identifier matches the App Store Connect record.
- Version and build number are verified.
- The uploaded build has completed processing.
Store Listing and Review
- App name, subtitle, description, and category are complete.
- Screenshots and other required assets are uploaded.
- Age rating and compliance questions are complete.
- Review contact information is correct.
- Test credentials and review notes are supplied when needed.
- The correct build is selected for the intended version.
- Release settings are reviewed before submission.
31. Interview Questions and Answers
Q1. What is App Store submission?
Answer: App Store submission is the process of uploading an iOS application to App Store Connect, completing its metadata and compliance information, and sending it to Apple for review before public distribution.
Q2. What is a bundle identifier?
Answer: A bundle identifier uniquely identifies an iOS application and connects its configuration with the appropriate Apple developer and distribution records.
Q3. What is App Store Connect?
Answer: App Store Connect is Apple's platform for managing app records, uploaded builds, metadata, TestFlight, App Review, and release settings.
Q4. What is the purpose of code signing?
Answer: Code signing helps establish the application's signing identity and ensures the build uses the appropriate platform distribution configuration.
Q5. What is a provisioning profile?
Answer: A provisioning profile associates an app identity with the relevant signing certificate and distribution permissions.
Q6. How do you create a production iOS build with EAS?
Answer: Configure the project and signing credentials, then run eas build --platform ios --profile production.
Q7. How do you upload an EAS build to App Store Connect?
Answer: Run eas submit --platform ios and follow the prompts to select a build and authenticate the submission.
Q8. What is TestFlight?
Answer: TestFlight is Apple's service for distributing eligible beta builds to internal and external testers before public release.
Q9. What is the difference between a version number and a build number?
Answer: The version number identifies a user-facing release, while the build number distinguishes uploaded builds and must follow Apple's applicable versioning requirements.
Q10. Why are privacy disclosures important?
Answer: They tell users and Apple how the app collects, uses, shares, and handles data. They must reflect the behavior of the app and its integrated SDKs.
Q11. What can cause an App Store rejection?
Answer: Common reasons include crashes, incomplete features, misleading metadata, privacy problems, incorrect permissions, payment-rule violations, and missing review information.
Q12. What is the purpose of App Review notes?
Answer: Review notes provide instructions or context that help reviewers access and evaluate the app's important features.
Q13. Can an iOS application be submitted from Windows?
Answer: Yes. A cloud workflow such as EAS Build and EAS Submit can create and submit iOS builds from supported operating systems without requiring a local Mac for the entire process. A traditional local Xcode archive requires macOS.
Q14. Does uploading a build automatically publish the app?
Answer: No. Uploading places the binary in App Store Connect. The developer must complete the required listing and compliance steps and submit the version for review. Public release follows approval and the selected release settings.
Q15. What should you do after an app is rejected?
Answer: Read the rejection details, reproduce the issue, make the required changes, test the fix, and respond through App Store Connect before resubmitting.
32. Practical Exercises
- Configure a unique iOS bundle identifier for a React Native project.
- Set the application name, version, and build number.
- Prepare an app icon and splash screen.
- Configure a camera or location permission with an accurate usage description.
- Audit third-party SDKs and prepare an app privacy inventory.
- Configure a production EAS build profile.
- Generate a production iOS build and inspect the build logs.
- Create an App Store Connect app record with the correct identifier.
- Upload a build and verify that it finishes processing.
- Prepare a TestFlight testing plan with at least ten test cases.
- Write an accurate app description and organize screenshots.
- Create a final release checklist for a hypothetical production app.
33. Quick Revision Notes
- A paid Apple Developer Program membership is generally required for App Store submission.
- The bundle identifier uniquely identifies the iOS application.
- The app version and build number must follow the release strategy and Apple's requirements.
- App icons, permission descriptions, and store screenshots must be prepared before release.
- Code signing and provisioning configuration are required for distribution builds.
- EAS Build can generate production iOS binaries for Expo and React Native applications.
- EAS Submit uploads a supported build to App Store Connect.
- TestFlight supports beta testing before public release.
- App Store Connect stores metadata, privacy declarations, builds, and review information.
- Privacy disclosures must reflect the behavior of the app and its third-party SDKs.
- App Review checks compliance with Apple's applicable guidelines.
- Uploading a binary does not automatically publish an app.
- After approval, the app is released according to the selected release settings.
- Review rejection details carefully and test any fixes before resubmission.
34. Conclusion
Preparing a React Native application for App Store submission requires careful coordination between application development, native configuration, signing, testing, privacy compliance, store metadata, and release management. Developers should verify the bundle identifier, version, build number, app assets, permissions, and production environment before generating the final binary.
Expo developers can streamline the process with EAS Build and EAS Submit, while teams using native iOS workflows can archive and upload applications through Xcode. TestFlight provides a valuable opportunity to test the uploaded build before submitting it for App Review.
A reliable release process includes accurate privacy disclosures, secure credentials, complete review information, tested core features, and a clear response plan for review feedback. Following these practices helps developers prepare professional iOS applications and manage future updates more consistently.
35. Additional Learning Resources